/**
 *@file osdPlugin.h
 *@author lynxi
 *@version v1.0
 *@date 2023-01-04
 *@par Copyright:
 *© 2023 北京灵汐科技有限公司 版权所有。
 * 注意：以下内容均为北京灵汐科技有限公司原创，未经本公司允许，不得转载，否则将视为侵权；对于不遵守此声明或者其他违法使用以下内容者，本公司依法保留追究权。\n
 *© 2022 Lynxi Technologies Co., Ltd. All rights reserved.
 * NOTICE: All information contained here is, and remains the property of Lynxi.
 *This file can not be copied or distributed without the permission of Lynxi
 *Technologies Co., Ltd.
 *@brief osd叠加插件
 */

#ifndef __OSD_PLUGIN_H_
#define __OSD_PLUGIN_H_

#include <stdint.h>
#include "lyn_plugin_dev.h"

#ifdef __cplusplus
extern "C" {
#endif

// typedef struct {
//     void *imgData;              // 原始图像数据
//     int imgW;                   // 原始图像宽
//     int imgH;                   // 原始图像高
//     void *targetData;           // sdk层限制了插件参数大小必须小于256字节，
//                                 // 无法直接将这个数组传入，改成下面的device内存地址方式
//                                 // 存放目标信息数组的device内存地址，插件接口里是以每个目标信息
//                                 // 占用TARGET_INFO结构体长度对这块内存进行解析，因此调用方
//                                 // 要对应的传这个参数
//     int targetNum;              // 目标信息数组(targetData)长度
// } OSD_PARAM_T;

// /**
//  * @brief osd叠加
//  *
//  * @param  param
//  * @return int
//  */
// int osdDraw(OSD_PARAM_T *param);


typedef struct {
    unsigned char *imgData; // 原始图像数据
    int width; 
    int height;
    int channels = 3;

    int num_point = 17;
    float _kpsVThrehold = 0.5f;

    void *poseInfo;           
} POSE_PARAM_T; //人体姿态17点画点和连线

/**
 * @brief pose
 *
 * @param  param
 * @return int
 */
int poseDraw(POSE_PARAM_T *param);

typedef struct {
    void *boxesInfo;            // box信息
    uint32_t imgW;              // 图像宽
    uint32_t imgH;              // 图像高
    lynPixelFormat_t imgFmt;    // 图像格式
    void *imgData;              // 图像数据
    lynFontSize fontSize;
    lynDrawColor fontColor;
    lynDrawThick boxThick;
    lynDrawColor boxColor;
} lynDrawSegBoxAndTextPara;

typedef struct {
    unsigned char *imgData; // 原始图像数据
    // unsigned char *imgData2; // 原始图像数据
    int width; 
    int height;
    int channels = 3;

    float _maskThreshold = 0.5;
    void *boxInfo;

    void *maskData;
    int maskDataLen;
} MASK_PARAM_T; 

/**
 * @brief mask
 *
 * @param  param
 * @return int
 */
int maskDraw(MASK_PARAM_T *param);

int lynDrawSegBoxAndText(lynDrawSegBoxAndTextPara *para);

#ifdef __cplusplus
}
#endif

#endif
